package com.bvgol.examples.my.thread.test;/**
 * @Classname SynchronizeToAsync
 * @Description TODO
 * @Date 2021/3/5 14:53
 * @Created by GUOCHEN
 */

import lombok.SneakyThrows;

import java.time.Instant;
import java.util.concurrent.TimeUnit;

/**
 * @program: my-spring-completely
 * @description: 同步http 拆异步
 * @author: GUOCHEN
 * @create: 2021/03/05 14:53
 */
public class SynchronizeToAsync {

    /*
        接口1
      1.http请求进来 前端带个uuid --> ocr-时间-文件名-uuid
      2.验证参数是否合规
      3.合规/不和规 即刻返回
      4.参数合规,
        立即开启新线程执行 http接口调用 接口调用成功之后 解析/存db/存redis对象/key存redis
      5.此接口返回redis key 并且到此结束
     */

    /*
     * 接口2 ,用刚才那个redis可以 请求 扫描结果结果 接口
     * redis key 不存在 说明http没有执行完 可以调整到2秒一刷
     * redis key 存在,说明已经响应完毕并且拿到对象并返回
     */

    /*
     * 怎么模拟一下?
     * 1
     *      key 生成
     *      验证参数
     *      异步方法
     * 2
     *      redis 根据key 找对象
     * 像不像生产者和消费者?
     */
//
    public String interfaceOne(String uuid, String others) {
        if (others.equals("1")) {
            System.out.println("参数合规");
            new Thread(() -> {
                Async(others);
            }).start();
//            Async(others);
            System.out.println("参数合规.方法返回");
            return "000";
        } else {
            System.out.println("参数不合规");
        }
        return null;
    }

    //
    public String interfaceTwo(String uuid) {

        if (true) {
            System.out.println("是时候表演真正的技术了");
        } else {
            System.out.println("有时候肌肉比头脑更管用");
        }

        return null;
    }

    @SneakyThrows
//    @Async //只有在spring容器启动了才有用
    public void Async(String others) {
        System.out.println("-----我来了!我来了 ----" + others);
        for (int i = 0; i < 5; i++) {
            TimeUnit.SECONDS.sleep(1);
            System.out.println("-----我在干活了,别催 ----" + i);
        }

        System.out.println("---干完啦干完啦--英雄登场! ----" + others);
    }

    public static void main(String[] args) {

        SynchronizeToAsync async = new SynchronizeToAsync();
        Instant now = Instant.now();
        String s = async.interfaceOne("", "1");
        System.out.println("主方法执行完毕s = " + s);

    }

}
